﻿using System;
using System.Collections.Generic;
using System.Text;

namespace 抽象类测试
{
    class Program
    {
        static void Main(string[] args)
        {
            test5();
        }
        static void test1()
        {
            Rena ren = new Chinese();
            Console.Write("请填写信仰：");
            //用户输入同时给属性赋值，判断信仰的类型
            ren.Belief = Console.ReadLine();
            //执行Eat方法
            ren.Eat();
            Console.ReadKey();
        }
        static void test2()
        {
            int a = 4;
            int b = 5;
            Console.WriteLine("两个数分别是a=4和b=5.");
          
           //分别用子类来实例化接口的对象
            ITwoNum itwonum1 = new JH();
            ITwoNum itwonum2 = new PF();
            //通过对象调用实现了接口中方法的子类覆写方法。
            itwonum1.twonum(ref a, ref b);
            Console.WriteLine("交换后两个数分别是a={0}和b={1}.",a,b);
            itwonum2.twonum(ref a, ref b);
            Console.WriteLine("平方后两个数分别是a={0}和b={1}.", a, b);
            Console.ReadLine();
       }

        static void test3()
        {
            //----调用接口IB中的Method方法有两种。-----
            //1.通过子类本身创建对象
            C c = new C();
            //再用对象c调用Method方法
            c.Method();
            Console.WriteLine();
            //2.通过对子类的实例，创建接口IB对对象B
            IB b = new C();
            //再用对象b调用Method方法
            b.Method();
            Console.WriteLine();
            //----调用接口IA中的Method方法有两种。-----
            //因为子类中默认的Method方法是才IB中继承来的，所以无法通过子类对象c直接引用Method方法
            //1.使用as关键字，将c重新转型为接口IA，并且将转型后的对象引用，指定给另外一个对象a
            IA a = new C() ;
            //再用对象a调用接口IA中的方法Method，此时a中就含有了c中从的IA接口继承来的方法Method。
            a.Method();
            Console.WriteLine();

            //2.原理同1，用强行转换将c转换为接口IA，并且将转型后的对象引用，指定给另外一个对象a2
            IA a2 = (IA)c;
            //再用对象a2调用接口IA中的方法Method，此时a2中就含有了c中从的IA接口继承来的方法Method。
            a2.Method();
            Console.Read();
        }

        static void test4()
        {
            DMren dm = new DMren("大力水手", "菠菜");
            Console.WriteLine();

            //创建bird对象b，同时给构造函数传入两个参数
            bird b = new bird("鸽子", "玉米");
            Console.WriteLine();
            Console.Read();
        }
        static void test5()
        {
            //使用string,int来实例化Test< T,S>类  
            Test<DateTime, int> t = new Test<DateTime, int>(DateTime.Now, 22);

            //调用泛型类中的方法  
            t.SetValue();
            Console.Read();
        }
    }
}
